package delphorm.web.forms;

import delphorm.entite.questionnaire.Reponse;
import delphorm.entite.questionnaire.ReponseFermee;
import delphorm.entite.questionnaire.ReponseOuverte;
import delphorm.entite.questionnaire.ValeurFichier;
import delphorm.entite.questionnaire.ValeurNumerique;
import delphorm.entite.questionnaire.ValeurTexte;

public class ReponseFormulaire {
	//type de la réponse
	String typeDeDonnee;
	
	//la réponse est ouverte ou fermée
	Boolean ouverte;
	
	//uniquement si la réponse est ouverte
	//intitule
	String Intitule;
	
	//uniquement si la réponse est fermée
	//valeur texte
	String valeurTexte;
	
	//valeur numérique
	Double valeurNumerique;
	
	//nom du fichier de l'utilisateur
	String nomFichier;
	
	//le fichier
	byte[] fichier;
	
	//le nom du fichier
	String filename;

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public byte[] getFichier() {
		return fichier;
	}

	public void setFichier(byte[] fichier) {
		this.fichier = fichier;
	}

	public String getNomFichier() {
		return nomFichier;
	}

	public void setNomFichier(String nomFichier) {
		this.nomFichier = nomFichier;
	}

	public Boolean getOuverte() {
		return ouverte;
	}

	public void setOuverte(Boolean ouverte) {
		this.ouverte = ouverte;
	}

	public Double getValeurNumerique() {
		return valeurNumerique;
	}

	public void setValeurNumerique(Double valeurNumerique) {
		this.valeurNumerique = valeurNumerique;
	}

	public String getValeurTexte() {
		return valeurTexte;
	}

	public void setValeurTexte(String valeurTexte) {
		this.valeurTexte = valeurTexte;
	}

	public String getIntitule() {
		return Intitule;
	}

	public void setIntitule(String intitule) {
		Intitule = intitule;
	}

	public String getTypeDeDonnee() {
		return typeDeDonnee;
	}

	public void setTypeDeDonnee(String typeDeDonnee) {
		this.typeDeDonnee = typeDeDonnee;
	}
	
	//permet de convertir cet objet
	//en réponse métier
	public Reponse toReponseMetier()
	{
		//si la réponse est ouverte
		if(getOuverte().booleanValue())
		{
			ReponseOuverte reponse = new ReponseOuverte();
			
			//met l'intitulé
			reponse.setIntitule(getIntitule());
			//met le type de données
			if(getTypeDeDonnee().equals("texte"))
			{
				reponse.setTypeDeDonnees(new Character('T'));
			}
			else if(getTypeDeDonnee().equals("numerique"))
			{
				reponse.setTypeDeDonnees(new Character('N'));
			}
			else if(getTypeDeDonnee().equals("fichier"))
			{
				reponse.setTypeDeDonnees(new Character('F'));
			}
			// TODO else exception 
			return reponse;
			
		}
		else //si la réponse est fermée
		{
			ReponseFermee reponse = new ReponseFermee();
			
			//met le type de donnée
			if(getTypeDeDonnee().equals("texte"))
			{
				reponse.setTypeDeDonnees(new Character('T'));
				//crée et initialise la valeur texte
				ValeurTexte valeur = new ValeurTexte();
				valeur.setValeur(getValeurTexte());
				//met la valeur dans la réponse
				reponse.setValeur(valeur);
			}
			else if(getTypeDeDonnee().equals("numerique"))
			{
				reponse.setTypeDeDonnees(new Character('N'));
//				crée et initialise la valeur numérique
				ValeurNumerique valeur = new ValeurNumerique();
				valeur.setValeur(getValeurNumerique());
				//met la valeur dans la réponse
				reponse.setValeur(valeur);
			}
			else if(getTypeDeDonnee().equals("fichier"))
			{
				reponse.setTypeDeDonnees(new Character('F'));
//				crée et initialise la valeur numérique
				ValeurFichier valeur = new ValeurFichier();
				valeur.setNomFichier(getNomFichier());
				valeur.setFichier(getFichier());
				valeur.setFilename(getFilename());
				//met la valeur dans la réponse
				reponse.setValeur(valeur);
			}
			//TODO else exception
			return reponse;
		}
	}
	public ReponseFormulaire(Reponse reponse)
	{
		fillFromReponseMetier(reponse);
	}
	
	public ReponseFormulaire()
	{
		
	}
	
	public void fillFromReponseMetier(Reponse reponse)
	{
		if(reponse.getTypeDeDonnees().equals(new Character('T')))
		{
			setTypeDeDonnee("texte");
		}
		else //TODO else exception
		{
			setTypeDeDonnee("numerique");
		}
		
		if(reponse.getType().equals("ouverte"))
		{
			ReponseOuverte repOuverte = (ReponseOuverte)reponse;
			setOuverte(new Boolean(true));
			setIntitule(repOuverte.getIntitule());
		}
		else //TODO else if == ferme else exception
		{
			setOuverte(new Boolean(false));
			ReponseFermee repFermee = (ReponseFermee)reponse;
			if(repFermee.getTypeDeDonnees().equals(new Character('T')))
			{
				ValeurTexte valTexte = (ValeurTexte)repFermee.getValeur();
				setValeurTexte(valTexte.getValeur());
			}
			else if(repFermee.getTypeDeDonnees().equals(new Character('N')))
			{
				ValeurNumerique valNumerique = (ValeurNumerique)repFermee.getValeur();
				setValeurNumerique(valNumerique.getValeur());
			}
			else if(repFermee.getTypeDeDonnees().equals(new Character('F')))
			{
				ValeurFichier valFichier = (ValeurFichier)repFermee.getValeur();
				setNomFichier(valFichier.getNomFichier());
				setFichier(valFichier.getFichier());
				setFilename(valFichier.getFilename());
			}
			//TODO else exception
		}
	}
	
}
